package fundefault

import (
	"codejy/globalfunc"
	"codejy/structdef"
)

func init() {
	globalfunc.RegisterFuncAll("IsFunDefaultExist", IsFunDefaultExist)
	globalfunc.RegisterFuncAll("ExecuteStrategy", ExecuteStrategy)
}

type FunDefault interface {
	//获取策略名称
	GetName() string
	//执行策略
	Execute(threadStore *structdef.ThreadStore, parameter []string) string
}

var funDefaultMap = make(map[string]FunDefault)

// 注册策略
func RegisterFunDefault(f FunDefault) {
	//判断是否已经存在
	if _, ok := funDefaultMap[f.GetName()]; ok {
		panic("默认函数已注册过了")
	}
	funDefaultMap[f.GetName()] = f
}

// 执行策略
func ExecuteStrategy(threadStore *structdef.ThreadStore, funName string, parameter []string) string {
	//判断是否有策略
	if _, ok := funDefaultMap[funName]; !ok {
		panic("函数不存在")
	}
	execute := funDefaultMap[funName].Execute(threadStore, parameter)
	return execute

}

// 判断是否存在
func IsFunDefaultExist(funName string) bool {
	//判断是否有策略
	if _, ok := funDefaultMap[funName]; !ok {
		return false
	}
	return true
}
